﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Molic.Core.Services;
using Molic.Core.Adorners;
using System.Windows;
using Molic.Core;
using System.Windows.Input;

namespace Molic.Core
{
    /// <summary>
    /// Molic controller interface.
    /// </summary>
    public interface IMolicController
    {
        /// <summary>
        /// The system canvas.
        /// </summary>
        System.Windows.Controls.UIElementCollection Models { get; set; }

        /// <summary>
        /// The system selection service.
        /// </summary>
        IMolicSelectionService SelectionService { get; set; }

        /// <summary>
        /// Create a new model based on its visual reference.
        /// </summary>
        /// <param name="VisualReference"></param>
        /// <returns></returns>
        MolicUIElement CreateModel(object VisualReference);
        /// <summary>
        /// Create a new model using its name.
        /// </summary>
        /// <param name="ModelName"></param>
        /// <returns></returns>
        MolicUIElement CreateModel(string ModelName);

        /// <summary>
        /// Shape created handler.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void ShapeFactory_OnShapeAdded(object sender, MolicShapeEventArgs e);

        /// <summary>
        /// Window load handler.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnLoad(object sender, EventArgs e);

        /// <summary>
        /// Canvas key down handler.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void canvas_KeyDown(object sender, KeyEventArgs e);

        /// <summary>
        /// Canvas mouse down handler.
        /// </summary>
        /// <param name="e"></param>
        void canvas_OnMouseDown(MouseButtonEventArgs e);

        /// <summary>
        /// Canvas mouse move event.
        /// </summary>
        /// <param name="e"></param>
        void canvas_OnMouseMove(MouseEventArgs e);

        /// <summary>
        /// Canvas mouse left button up handler.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        void canvas_OnLeftUp(object sender, MouseEventArgs args);

        /// <summary>
        /// Canvas mouse left button down handler.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        void canvas_OnLeftDown(object sender, MouseEventArgs args);

        /// <summary>
        /// Canvas drop handler.
        /// </summary>
        /// <param name="e"></param>
        void canvas_OnDrop(DragEventArgs e);

        MolicUIElement CreateModel(string ModelName, Guid id);
    }
}
